home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
web
/
fweb
/
fweb-1.30
/
manual
/
f90_cpp.web
< prev
next >
Wrap
Text File
|
1993-06-16
|
3KB
|
119 lines
@z --- f90_cpp.web ---
This file is included in fwebman.tex.
Author: J. A. Krommes
Version: 1.23
Date: April 1, 1992
@x-----------------------------------------------------------------------------
@r9[-r/ -W[]
@* INTRODUCTION. This example demonstrates operator overloading in both
Ratfor--90 and~C$++$. It also shows how brackets may be used instead of
parentheses for \Fortran\ array indices.
@l "\\let\\WARRAY\\WSUB" // Subscript \Fortran\ indices.
@a
@<Ratfor--90@>@;
@c++
@<C$++$@>@;
@ The following example is excerpted from the ANSI Draft~S8, Version~112
for the Fortran--90 language.
@v .IN. "\\in" < /* Make \.{.IN.} display as~`$\in$' and be treated as a
relational operator. */
@v <= "\\subset" <= /* Make \.{.LE.} display as~`$\subset$' and be treated
as a relational operator. */
@<R...@>=
module integer_sets
{
integer, parameter :: max_set_card = 200;
type set
{
private:
integer card;
integer element[max_set_card];
};
interface operator(.IN.)
{
module procedure element;
};
interface operator(<=)
{
module procedure subset;
};
@<Union function@>@;
@<Subset function@>@;
}
@ This function uses structure elements. We overload the element
operator~`\.{\%}' to make the resulting code look more like~\C.
@v % "." . // Make \.\% print as~`\..' and also be treated as~`\..'.
@<Union function@>=
function union(A,B)
type(set) A,B;
{
type(set) UNION;
integer j;
UNION = A;
do j=1,B%card;
if(!(B%element[j] .IN. A))
if(UNION%card < max_set_card)
{
UNION%card += 1;
UNION%element[UNION%card] =
B%element[j];
}
else ; // Maximum set size exceeded...
}
@ We claim that this is much more visually appealing than a raw listing.
@<Subset function@>=
logical function subset(A,B)
type(set) A,B;
{
integer i;
subset = A%card <= B%card; /* In the source, this is ``\.{subset\ =\
A\%card\ <=\ B\%card;}'' */
if(!subset) return;
do i=1,A%card;
subset = subset && (A%element[i] .IN. B);
}
@ Here is a short example of operator overloading in~\Cpp. Note that since the
global language is \Ratfor--90, we must explicitly insert a language
command in the following definition section in order that the star be
overloaded in the proper language.
@c++
@v * "\\times" *
@<C...@>=
class complex
{
double re,im;
public:
complex(double r,double i) {re=r; @+ im=i;}
friend complex operator+(complex, complex);
friend complex operator*(complex, complex);
};
z = x*y; /* An example of a statement using the overloading multiplication
operator. */
@* INDEX.